package com.linked.universal.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;

/**
 * @author :dbq
 * @date : 2023/8/9 9:05
 * @description : desc
 */
@Slf4j
public class LinkedFileUtils {

    public final static String TMP_FILE = "tmpFile/";

    public static InputStream multipartToInputStream(MultipartFile multipartFile) throws IOException {
        InputStream inputStream = null;
        File file = null;
        try {
            // 创建临时文件
            file = File.createTempFile("tmp", null);
            // 把multipartFile写入临时文件
            multipartFile.transferTo(file);
            // 使用文件创建 inputStream 流
            inputStream = new FileInputStream(file);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 最后记得删除文件
            file.deleteOnExit();
            // 关闭流
            inputStream.close();
        }
        return inputStream;
    }

    public static boolean createDir(String destDirName) {
        File dir = new File(destDirName);
        if (dir.exists()) {
            //log.info("创建目录" + destDirName + "失败，目标目录已经存在");
            return false;
        }
        if (!destDirName.endsWith(File.separator)) {
            destDirName = destDirName + File.separator;
        }
        //创建目录
        if (dir.mkdirs()) {
            //log.info("创建目录" + destDirName + "成功！");
            return true;
        } else {
            //log.info("创建目录" + destDirName + "失败！");
            return false;
        }
    }

    public static void removeTmpDir(String dir) {
        try {
            File tmp = new File(dir);
            Files.walk(tmp.toPath())
                    .filter(Files::isRegularFile)
                    .map(Path::toFile)
                    .forEach(File::delete);
        } catch (Exception e) {
            log.error("删除历史文件夹！");
        }
    }

    /**
     * 删除文件夹
     */
    public static boolean deleteFolder(File folder) {
        try {
            if (!folder.exists()) {
                return true;
            }
            File[] files = folder.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        deleteFolder(file); // 递归删除子文件夹
                    } else {
                        file.delete(); // 删除文件
                    }
                }
            }
            folder.delete(); // 删除文件夹本身
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
